<?php

namespace app\admin\controller;

use app\common\Common;
use app\common\Error;
use app\common\JsonRpcClient;
use app\Request;

class OpenDouyin extends Base
{
	private static JsonRpcClient $jsonRpcClient;

	public function __construct()
	{
		JsonRpcClient::config(config('jsonrpc.address'));
		JsonRpcClient::$timeout = 5;
		self::$jsonRpcClient = JsonRpcClient::instance('admin/v1/OpenDouyin');
	}

	/**
	 * 获取全部Openid
	 * 
	 * @author dotdotdot
	 * 
	 * @return int      code     状态码
	 * @return string   msg      状态信息
	 * @return string [open_id]data 抖音open_id
	 * @return int    [short_id]data 抖音号
	 * @return string [client_key]data 授权来源
	 * @return int    [status]data 状态:0不可用,1可用
	 */
	public function getOpenId()
	{
		$rpcData = self::$jsonRpcClient->getOpenId();

		if ($rpcData['code'] !== Error::SUCCESS_CODE) {
			return Common::fail($rpcData['msg'], $rpcData['code']);
		}

		return Common::success($rpcData['data']);
	}

	/**
	 * 获取群口令
	 * 
	 * @author dotdotdot
	 * 
	 * 
	 * @return int      code     状态码
	 * @return string   msg      状态信息
	 * @return string [group_name]data 群名
	 * @return string [expiration_day]data 群口令有效期
	 * @return string [password]data  群口令
	 * 
	 */
	public function getGroupPassword()
	{
		$rpcData = self::$jsonRpcClient->getGroupPassword();

		if ($rpcData['code'] !== Error::SUCCESS_CODE) {
			return Common::fail($rpcData['msg'], $rpcData['code']);
		}

		return Common::success($rpcData['data']);
	}

	/**
	 * 新增群口令
	 * 
	 * @author dotdotdot
	 * 
	 * @param string group_name 群名
	 * @param string expiration_day 群有效期
	 * @param string password 群口令
	 * @param string group_id 群id
	 * 
	 * @return int      code     状态码
	 * @return string   msg      状态信息
	 */
	public function postGroupPassword(Request $request)
	{
		$params = [
			'group_name' => $request->post('group_name'),
			'expiration_day' => $request->post('expiration_day'),
			'password' => $request->post('password'),
			'group_fans_id' => $request->post('group_fans_id')
		];

		$rpcData = self::$jsonRpcClient->postGroupPassword($params);

		if ($rpcData['code'] !== Error::SUCCESS_CODE) {
			return Common::fail($rpcData['msg'], $rpcData['code']);
		}

		return Common::success([], $rpcData['msg']);
	}

	/**
	 * 上传图片
	 * 
	 * @author dotdotdot
	 * 
	 * @param string open_id 抖音open_id
	 * @param string image 图片,base64编码
	 * @param string image_name 图片名
	 * 
	 * @return int      code     状态码
	 * @return string   msg      状态信息
	 * @return string [image_id]data 图片id
	 * @return int [width]data 图片宽度
	 * @return int [height]data 图片高度
	 * @return string [md5]data 图片md5
	 * 
	 */
	public function postUploadImage(Request $request)
	{
		$params = [
			'open_id' => $request->post('open_id'),
			'image' => base64_encode(file_get_contents($request->file('image')->getRealPath())),
			'image_name' => $request->file('image')->getOriginalName()
		];

		$rpcData = self::$jsonRpcClient->postUploadImage($params);

		if ($rpcData['code'] !== Error::SUCCESS_CODE) {
			return Common::fail($rpcData['msg'], $rpcData['code']);
		}

		return Common::success($rpcData['data']);
	}

	/**
	 * 查询聊天群
	 * 
	 * @author dotdotdot
	 * 
	 * @param string open_id 抖音open_id
	 * 
	 * @return int      code     状态码
	 * @return string   msg      状态信息
	 * @return int     [id][data]data      id
	 * @return string [group_id][data]data 群组id
	 * @return string [open_id][data]data 抖音open_id
	 * @return string [group_name][data]data 群名称
	 * @return string [avatar_uri][data]data 群头像
	 * @return int [group_type][data]data 2对应主播粉丝群；5对应万粉群
	 * @return string [description][data]data 群简介，不超过30个中文字符
	 * @return int [open_audit_switch][data]data 1 开启进群审批 其他 不开启
	 * @return int [show_at_profile][data]data 1 展示到个人主页 其他 不展示（主播粉丝群默认不在个人主页展示加群入口）
	 * @return int [live_auto_sync][data]data  1 直播同步 其他 不同步
	 * @return int [item_auto_sync][data]data 1 作品同步 其他 不同步
	 * @return int [exist_num][data]data 群现有人数
	 * @return int [count]data 当前数量
	 * @return int [total_count]data 总数
	 *
	 */
	public function getGroupFans(Request $request)
	{
		$params = [
			'page' => $request->get('page'),
			'limit' => $request->get('limit'),
			'open_id' => $request->get('open_id')
		];

		$rpcData = self::$jsonRpcClient->getGroupFans($params);

		if ($rpcData['code'] !== Error::SUCCESS_CODE) {
			return Common::fail($rpcData['msg'], $rpcData['code']);
		}

		return Common::success($rpcData['data']);
	}

	/**
	 * 创建聊天群
	 * 
	 * @author dotdotdot
	 * 
	 * @param string open_id 抖音open_id
	 * @param string group_name 群名称
	 * @param string avatar_uri 群头像
	 * @param int group_type 2对应主播粉丝群；5对应万粉群
	 * @param string description 群简介，不超过30个中文字符
	 * @param int open_audit_switch 1 开启进群审批 其他 不开启
	 * @param int show_at_profile 1 展示到个人主页 其他 不展示（主播粉丝群默认不在个人主页展示加群入口）
	 * @param int live_auto_sync  1 直播同步 其他 不同步
	 * @param int item_auto_sync 1 作品同步 其他 不同步
	 * @param int fans_limit 加群门槛：粉丝团等级（0-无要求，1-1级及以上，3-3级及以上，5-5级及以上，9-9级及以上，12-12级及以上，15-15级及以上，17-17级及以上，20-20级及以上）
	 * @param int active_fans 加群门槛：粉丝活跃度（0-无要求，1-是群主的活跃粉丝）
	 * @param int relation_type 加群门槛：关注条件（0-无要求，1-仅关注，7-关注我超过7天以上，30-关注我超过30天以上，60-关注我超过60天以上）
	 * @param int allow_invite 加群门槛：开启群成员邀请进群（1-允许邀请，0-不允许邀请）
	 * 
	 * 
	 * @return int      code     状态码
	 * @return string   msg      状态信息
	 */
	public function postGroupFans(Request $request)
	{
		$params = [
			'open_id' => $request->post('open_id'),
			'group_name' => $request->post('group_name'),
			'avatar_uri' => $request->post('avatar_uri'),
			'group_type' => $request->post('group_type'),
			'description' => $request->post('description'),
			'open_audit_switch' => $request->post('open_audit_switch'),
			'show_at_profile' => $request->post('show_at_profile'),
			'live_auto_sync' => $request->post('live_auto_sync'),
			'item_auto_sync' => $request->post('item_auto_sync'),
			'fans_limit' => $request->post('fans_limit'),
			'active_fans' => $request->post('active_fans'),
			'relation_type' => $request->post('relation_type'),
			'allow_invite' => $request->post('allow_invite')
		];

		$rpcData = self::$jsonRpcClient->postGroupFans($params);

		if ($rpcData['code'] !== Error::SUCCESS_CODE) {
			return Common::fail($rpcData['msg'], $rpcData['code']);
		}

		return Common::success([], $rpcData['msg']);
	}
}
